﻿using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using iBeauty.BusinessObjects;
using iBeauty.BLL;
using iBeauty.App.Common;

namespace iBeauty.App.UCControl
{
    public partial class CustomerDetailUc : XtraUserControl
    {
        public bool IsAddNew { get; set; }

        public CustomerDetailUc()
        {
            InitializeComponent();
        }

        private string ID = "";
        private CustomerBLL service = new CustomerBLL();
        private bool check;
        private string lastID = "";
        private string GetCustomerID(string id)
        {
            ID = id;
            return ID;
        }
        public void Check(bool kt)
        {
            check = kt;
        }
        private void LoadGender()
        {
            var gender = new Dictionary<byte, string>();
            gender.Add((byte)EnumBeauty.Gender.Female, EnumBeauty.GetDescriptionFromEnumValue(EnumBeauty.Gender.Female));
            gender.Add((byte)EnumBeauty.Gender.Male, EnumBeauty.GetDescriptionFromEnumValue(EnumBeauty.Gender.Male));

            cbbGender.DataSource = new BindingSource(gender, null);

            cbbGender.ValueMember = "Key";
            cbbGender.DisplayMember = "Value";
        }

        private void LoadJobs()
        {
            var Jobs = new Dictionary<byte, string>();
            Jobs.Add((byte)EnumBeauty.Job.Teacher, EnumBeauty.GetDescriptionFromEnumValue(EnumBeauty.Job.Teacher));
            Jobs.Add((byte)EnumBeauty.Job.Worker, EnumBeauty.GetDescriptionFromEnumValue(EnumBeauty.Job.Worker));
            Jobs.Add((byte)EnumBeauty.Job.Farmer, EnumBeauty.GetDescriptionFromEnumValue(EnumBeauty.Job.Farmer));
            cbbJobs.DataSource = new BindingSource(Jobs, null);
            cbbJobs.ValueMember = "Key";
            cbbJobs.DisplayMember = "Value";
        }
        private void LoadReasonVisit()
        {
            var Reason = new Dictionary<byte, string>();
            Reason.Add((byte)EnumBeauty.ReasonVisit.FriendInvite, EnumBeauty.GetDescriptionFromEnumValue(EnumBeauty.ReasonVisit.FriendInvite));
            Reason.Add((byte)EnumBeauty.ReasonVisit.FindInternet, EnumBeauty.GetDescriptionFromEnumValue(EnumBeauty.ReasonVisit.FindInternet));
            Reason.Add((byte)EnumBeauty.ReasonVisit.Other, EnumBeauty.GetDescriptionFromEnumValue(EnumBeauty.ReasonVisit.Other));
            cbbReasonCome.DataSource = new BindingSource(Reason, null);
            cbbReasonCome.ValueMember = "Key";
            cbbReasonCome.DisplayMember = "Value";
        }
        private string GetLastPrefix()
        {
            lastID = service.GetLastID();
            string[] prefix = Regex.Split(lastID, "[0-9]");
            return prefix[0];

        }

        private void CustomerDetailUc_Load(object sender, EventArgs e)
        {
            LoadGender();
            LoadJobs();
            LoadReasonVisit();

            if (IsAddNew)
            {
                lblTitle.Text += " (Tạo mới)";
            }

            //lastID = service.GetLastID();
            //string prefix = GetLastPrefix();
            //string nextID = "";
            //Customer cus = new Customer();
            //if (check)
            //{
            //    //Check = true = Thêm mới
            //    //TODO: Tạo mã khách hàng tự động
            //    nextID = service.NextID(lastID, prefix);
            //    txtCustomerCode.Text = nextID;
            //    txtCustomerName.Focus();

            //}
            //else
            //{
            //    //Check = false = Xem chi tiếtg
                
            //    cus = service.GetCustomer(ID);
            //    txtCustomerCode.Text = cus.CustomerCode;
            //    txtCustomerName.Text = cus.CustomerName;
            //    txtPhone.Text = cus.Phone;
            //    txtEmail.Text = cus.Email;
            //    txtAddress.Text = cus.Address;
            //    dateEditBorn.DateTime = Convert.ToDateTime(cus.Born);
            //    int age = DateTime.Now.Year - Convert.ToDateTime(cus.Born).Year;
            //    txtAge.Text = Convert.ToString(age);
            //    if (cus.Gender == "0")
            //    {
            //        cbbGender.Text = "Nữ";
            //    }
            //    else
            //    {
            //        cbbGender.Text = "Nam";
            //    }
            //    if (cus.Job == 0)
            //    {
            //        cbbJobs.Text = "Giáo viên";
            //    }
            //    else if (cus.Job == 1)
            //    {
            //        cbbJobs.Text = "Công nhân viên chức";
            //    }
            //    else
            //    {
            //        cbbJobs.Text = "Nông dân";
            //    }

            //    dateEditFirstVisit.EditValue = cus.FirstVisit;
            //    dateEditLastVisit.EditValue = cus.LastVisit;
            //    txtDecription.Text = cus.Description;
            //}

        }


        private void btnSave_Click(object sender, EventArgs e)
        {
            //TODO: Thông báo tồn tại mã KH trong CSDL nếu người dùng nhập trùng mã. Vấn đề này em đang có 1 chút thắc mắc
            // Có 1 nút Lưu cho 2 trường hợp: Thêm và sửa. 
            //Phương án giải quyết nút Lưu: Kiểm tra sự tồn tại của mã khách hàng. Nếu đã tồn tại thì là sửa, ngược lại là thêm mới
            //Nhưng vì người dùng tự nhập mã, chẳng may lúc người dùng muốn thêm mới mà nhập mã đã tồn tại thì nó lại rơi vào trường hợp lưu.
            //Trong khi phải xử lý nếu người dùng nhập mã đã tồn tại thì phải đưa ra thông báo nhập mã khác. 
            //Vậy thì biết lúc nào là Sửa, lúc nào là thông báo nhập lại mã nếu người dùng nhập mã trùng?
            //Phương án giải quyết: Em chưa nghĩ ra

            Customer cus = new Customer();
            cus.CustomerCode = txtCustomerCode.Text;
            cus.CustomerName = txtCustomerName.Text;
            cus.Address = txtAddress.Text;
            cus.Phone = txtPhone.Text;
            cus.Email = txtEmail.Text;
            cus.Born = dateEditBorn.DateTime;
            cus.Gender = cbbGender.SelectedValue.ToString();
            cus.Job = int.Parse(cbbJobs.SelectedValue.ToString());
            cus.FirstVisit = dateEditFirstVisit.DateTime;
            cus.LastVisit = dateEditLastVisit.DateTime;
            cus.Description = txtDecription.Text;
            if (service.CheckExitsCustomer(cus.CustomerCode))
            {
                //Cập nhật khách hàng nếu đã tồn tại mã
                cus.ModifiedDate = DateTime.Now;
                service.UpdateCustomer(cus);
            }
            else
            {
                //Thêm mới khách hàng nếu mã chưa tồn tại
                cus.CreateDate = DateTime.Now;
                service.AddCustomer(cus);
            }
            Application.Exit();


        }

        private void btnCancle_Click(object sender, EventArgs e)
        {
            Application.Exit();

        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            //TODO: Xóa khách hàng theo mã khách hàng. Nhưng có 2 trường mã trong bảng customer?
            service.RemoveCustomer(ID);
        }
    }
}
